def find_longest_increasing_subsequence(nums):
    if not nums:
        return 0
    
    # 初始化一个列表用于存储当前找到的最长上升子序列的末尾元素的最小值
    sub = []
    
    for num in nums:
        # 使用二分查找找到第一个大于等于num的位置
        i = 0
        j = len(sub)
        
        while i < j:
            m = (i + j) // 2
            if sub[m] < num:
                i = m + 1
            else:
                j = m
        
        # 如果i等于sub的长度，说明num比sub中所有元素都大，可以将其添加到sub末尾
        if i == len(sub):
            sub.append(num)
        else:
            # 否则，将sub[i]替换为num
            sub[i] = num
    
    # sub的长度即为最长严格递增子序列的长度
    return len(sub)

